In a networking environment where a node communicates with another node via a communication medium, data transfer can occur between nodes having varying data packet throughput/processing capabilities. Typically, when data (e.g., associated with data frames and/or data packets) is forwarded from a node having an equal or slower throughput capability as compared to the receiving node, congestion at the receiving end of the communication medium does not exist. However, when data is forwarded from a node having a faster throughput capability as compared to a slower receiving node, congestion at the receiving end of the communication medium is common.
Flow control is an example way of addressing congestion at the receiving end of a communication medium. One typical way to implement flow control is to send a message, for example, a pause frame. The message instructs one or more other nodes to stop forwarding data to a congested node until another message is sent from the congested node that instructs the transmitting node(s) to remove the pause and begin/continue to forward the data. This type of flow control is used, for example, between nodes communicating in an Ethernet Local Area Network (LAN) operating in compliance with the Institute for Electrical and Electronic Engineers (IEEE) 802.3 standard for the CSMA/CD (Carrier Sense Multiple Access with Collision Detection) protocol. See IEEE 802.3-2002: IEEE Standard for Information technology—Telecommunications and information exchange between systems—Local and metropolitan area networks—Specific requirements Part 3: CSMA/CD Access Method and Physical Layer Specifications, published August 2002, and/or later versions of the standard (the “Ethernet standard”).
Two potential problems may exist with pause frames. First, the congested node in some instances may have to wait for a period of time to send a message to remove a pause to the other node. Second, there is a delay in the time it takes for the other node to decode and respond to the message to remove a pause. For example, if a large data packet is to be forwarded, the congested node typically waits until this large data packet is forwarded before sending a message to remove a pause. Thus, a latency may result. This latency, for example, may delay the forwarding of a short burst of smaller packets.
In one example, a data packet of size 1518 bytes has started to be forwarded from a congested node just before the node decided to send a message to remove a pause. In this example, while the congested node waits to forward this data packet, nineteen data packets each including 64 bytes of data could have been forwarded from the other node. Since the transmission of the nineteen data packets was delayed, communication medium bandwidth may have been wasted.
Another way to implement flow control is using a given constant Packet to Packet Gap (PPG) at the transmitting node. In one example, PPG is a sum of an Inter Packet Gap (IPG) and a packet length or size. Stated differently, PPG may be the gap between the start times of two consecutive packets. The constant PPG is typically determined based on the disparity in the throughput capability (e.g., packets/unit of time) of the transmitting node as compared to the receiving node over a communication medium. For example, a 10% disparity exists if the receiving node has a throughput capability of 100 packets/unit of time and the transmitting node can forward data packets at a rate of 110 packets/unit of time. As a result, a given constant PPG gap is needed at the transmitting node to delay the forwarding of packets to accommodate for this 10% disparity in throughput capability and avoid congestion at the receiving node.
In one example, with the 10% disparity between the nodes stated above, the average size of data packets forwarded from the transmitting node is 200 bytes. As a result, the transmitting node may insert an extra delay. When inserted, the extra delay results a time delay that would equate to forwarding 200 bytes×10%=20 bytes of additional data. The communication medium may also have a minimum IPG to facilitate a delineation of data packets, for example, a 20 byte minimum IPG. The transmitting node may maintain a given constant PPG gap between the start times of data packets transmitted to the receiving node based on the average size of data packets (200 bytes), the additional delay due to the throughput disparity (20 bytes) and the minimum IPG (20 bytes). As a result, the given constant PPG gap maintained by the transmitting node is 240 bytes.
Since PPG is the gap between the start times of two consecutive data packets, data packets of sizes greater than 220 bytes plus the minimum IPG of 20 bytes will meet or exceed the constant PPG of 240 bytes. Since congestion is unlikely to occur for data packets of these sizes, these data packets are forwarded without any additional delay. Data packets of sizes smaller than 220 bytes are forwarded only after a delay to avoid congestion. However, the delaying of data packets smaller than a size of 220 bytes will not allow the bursting of these smaller data packets, even if the receiving node has enough buffer capacity to absorb some or the entire burst. Thus, communication medium's bandwidth may be under-utilized with a constant PPG that does not account for the buffer capacity of the receiving node.